package com.fox.utils;


import com.fox.domain.entity.Menu;
import com.fox.domain.vo.MenuTreeVo;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

public class SystemConverter {

    private SystemConverter() {
    }

    public static List<MenuTreeVo> buildMenuSelectTree(List<Menu> menus) {
        List<MenuTreeVo> menuTreeVos = new ArrayList<>();

        // 映射Menu对象为MenuTreeVo对象
        for (Menu menu : menus) {
            menuTreeVos.add(new MenuTreeVo(menu.getId(), menu.getMenuName(), menu.getParentId(), null));
        }

        List<MenuTreeVo> options = new ArrayList<>();

        // 过滤parentID为0的元素
        for (MenuTreeVo menuTreeVo : menuTreeVos) {
            if (menuTreeVo.getParentId().equals(0L)) {
                menuTreeVo.setChildren(getChildList(menuTreeVos, menuTreeVo));
                options.add(menuTreeVo);
            }
        }
        return options;
    }

    /**
     * 得到子节点列表
     */
    private static List<MenuTreeVo> getChildList(List<MenuTreeVo> list, MenuTreeVo option) {
        List<MenuTreeVo> options = new ArrayList<>();

        for (MenuTreeVo menuTreeVo : list) {
            if (Objects.equals(menuTreeVo.getParentId(), option.getId())) {
                menuTreeVo.setChildren(getChildList(list, menuTreeVo));
                options.add(menuTreeVo);
            }
        }
        return options;
    }

}
